﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Navigation;

namespace NhaHangKhachSan.DatPhong
{
    public partial class ChonNgay : Page
    {
        string ngayDen = "";
        string ngayDi = "";
        int nguoiLon = 0;
        int treEm = 0;
        int soDem = 0;
        int soPhong=0;
        //
        public ChonNgay()
        {
            InitializeComponent();
        }

        // Executes when the user navigates to this page.
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            string[] ngayHT = DateTime.Today.ToShortDateString().Split('/');
            string ngayKT = NgayKeTiep(Convert.ToInt32(ngayHT[1]), Convert.ToInt32(ngayHT[0]), Convert.ToInt32(ngayHT[2]));
            cldNgay.SelectedDate = Convert.ToDateTime(ngayKT);
            tblNgayO.Text = "Ngày khách ở: " + ngayDen + " - " + ngayDi;
        }

        private void cldNgay_SelectedDatesChanged(object sender, SelectionChangedEventArgs e)
        {
            int temp = 0;
            ngayDen = Convert.ToDateTime(cldNgay.SelectedDate.ToString()).ToShortDateString();            
            foreach (DateTime selectDate in e.AddedItems)
            {
                temp++;
                ngayDi = selectDate.ToShortDateString();
            }
            if (string.Compare(ngayDen, ngayDi) == 0)
            {
                string[] ngays = ngayDi.Split('/');
                ngayDi = NgayKeTiep(Convert.ToInt32(ngays[1]), Convert.ToInt32(ngays[0]), Convert.ToInt32(ngays[2]));
                cldNgay.SelectedDates.AddRange(Convert.ToDateTime(ngayDen), Convert.ToDateTime(ngayDi));
            }
            else
            {
                dpNgayDen.Text = ngayDen;
                dpNgayDi.Text = ngayDi;
            }
            tblNgayO.Text = "Ngày khách ở: " + ngayDen + " - " + ngayDi;
            string[] ngay1=ngayDen.Split('/');
            string[] ngay2=ngayDi.Split('/');
            soDem = KhoangCachHaiNgay(Convert.ToInt32(ngay1[1]), Convert.ToInt32(ngay1[0]), Convert.ToInt32(ngay1[2]), Convert.ToInt32(ngay2[1]), Convert.ToInt32(ngay2[0]), Convert.ToInt32(ngay2[2]));
            tblSoDem.Text = "Tổng số đêm: " + Convert.ToString(soDem);
        }

        public string NgayKeTiep(int _ngay, int _thang, int _nam)
        {
            string ngayke = "";
            int ngay = 0;
            int thang = 0;
            int nam = 0;
            //
            switch(_thang)
            {
                case 1: case 3: case 7: case 8: case 10: case 12:
                    {
                        if(_ngay<31)
                        {
                            ngay = _ngay + 1;
                            thang = _thang;
                            nam = _nam;
                        }
                        else
                        {
                            if(_thang==12)
                            {
                                ngay = 1;
                                thang = 1;
                                nam = _nam + 1;
                            }
                            else
                            {
                                ngay = 1;
                                thang = _thang + 1;
                                nam = _nam;
                            }
                        }
                    }break;
                case 4: case 6: case 9: case 11:
                    {
                        if(_ngay<30)
                        {
                            ngay = ngay + 1;
                            thang = _thang;
                            nam = _nam;
                        }
                        else
                        {
                            ngay = 1;
                            thang = _thang + 1;
                            nam = _nam;
                        }
                    }break;
                case 2:
                    {
                        if(((_nam%4==0) && (_nam%100!=0))||((_nam%400==0) && (_nam%100!=0)))
                        {
                            if(_ngay<29)
                            {
                                ngay = _ngay + 1;
                                thang = 2;
                                nam = _nam;
                            }
                            else
                            {
                                ngay = 1;
                                thang = 3;
                                nam = _nam;
                            }
                        }
                        else
                        {
                            if(_ngay<28)
                            {
                                ngay = _ngay + 1;
                                thang = 2;
                                nam = _nam;
                            }
                            else
                            {
                                ngay = 1;
                                thang = 3;
                                nam = _nam;
                            }
                        }
                    }break;
            }

            ngayke = Convert.ToString(thang) + "/" + Convert.ToString(ngay) + "/" + Convert.ToString(nam);
            return ngayke;
        }

        public int SoNgayTrongThang(int _thang, int _nam)
        {
            switch(_thang)
            {
                case 2:
                    {
                        if (((_nam % 4 == 0) && (_nam % 100 != 0)) || ((_nam % 400 == 0) && (_nam % 100 != 0)))
                            return 29;
                        else
                            return 28;
                    }
                case 4:
                case 6:
                case 9:
                case 11:
                    return 30;
                case 1:
                case 3:
                case 5:
                case 7:
                case 8:
                case 10:
                case 12:
                    return 31;
                default:
                    return 0;
            }
        }

        public int KhoangCachHaiNgay(int _ngay1, int _thang1, int _nam1, int _ngay2, int _thang2, int _nam2)
        {
            int kc = 0;
            //
            int soNgay1 = _ngay1;
            for (int i = 1; i < _thang1; i++)
            {
                soNgay1 += SoNgayTrongThang(i, _nam1);
            }
            //
            int soNgay2 = _ngay2;
            for (int j = 1; j < _thang2; j++)
            {
                soNgay2 += SoNgayTrongThang(j, _nam2);
            }

            //
            int soNgayN1N2 = 0;
            for (int k = _nam1; k < _nam2; k++)
            {
                soNgayN1N2 += 365 + SoNgayTrongThang(2, k) - 28;
            }
            if (_nam1 > _nam2)
                soNgayN1N2 -= -1;
            return kc = soNgay2 - soNgay1 + soNgayN1N2;
        }

        private void dpNgayDen_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            cldNgay.SelectedDate = Convert.ToDateTime(dpNgayDen.Text);
        }

        private void dpNgayDi_SelectedDateChanged(object sender, SelectionChangedEventArgs e)
        {
            cldNgay.SelectedDates.AddRange(Convert.ToDateTime(dpNgayDen.Text), Convert.ToDateTime(dpNgayDi.Text));
        }

        private void btnCheck_Click(object sender, RoutedEventArgs e)
        {
            nguoiLon=Convert.ToInt32(nudNguoiLon.Value);
            treEm=Convert.ToInt32(nudTreEm.Value);
            soPhong=Convert.ToInt32(nudSoPhong.Value);
            App.ShowChonPhong(ngayDen, ngayDi, nguoiLon, treEm, soPhong, soDem);
        }

        private void nudSoPhong_ValueChanged(object sender, RoutedPropertyChangedEventArgs<double> e)
        {

        }     
    }
}
